package ObjectOriented;

import java.lang.*;
/**
 * 包装类型
    引用类型可以赋值为null，而基本类型不行
    引用类型可以调用方法，而基本类型不行
  Java为每个基本类型提供了包装类型，包装类型是引用类型，可以为null，可以调用方法
     java.lang包中提供了以下包装类型
        Byte, Short, Integer, Long, Float, Double, Character, Boolean
        通过 import java.lang.*;导入所有包装类型; 通过import java.lang.Integer;导入指定包装类型
     包装类型的值可以通过intValue()方法获取
     包装类型的值可以通过valueOf()方法获取
     包装类型的比较不能使用==，而是使用equals()方法
  自动装箱与拆箱
    自动装箱：将基本类型转换为包装类型
    自动拆箱：将包装类型转换为基本类型
  静态工厂方法：它尽可能地返回缓存的实例以节省内存。
    Integer i = Integer.valueOf(100); // 通过静态工厂方法获取包装类型的值
    创建新对象时，优先使用静态工厂方法，而不是new操作符
 */
public class PackagingType {
  public static void main(String[] args) {
    int i = 100;
    Integer n1 = new Integer(i); // 基本类型转换为包装类型
    Integer n2 = Integer.valueOf(i); // 通过静态方法valueOf(int)创建Integer实例:
    Integer n3 = Integer.valueOf("100"); // 通过静态方法valueOf(int)创建Integer实例:

    System.out.println(n1.intValue()); // 100
    System.out.println(n2.intValue()); // 100
    System.out.println(n3.intValue()); // 100

    Integer n4 = i; // 自动装箱
    int n5 = n4; // 自动拆箱
    System.out.println(n5); // 100

    Integer n6 = 100;
    System.out.println(n6 == n1); 
    System.out.println(n6.equals(n1)); // true
  }
}

class Interger {
  private int value;
  public Interger(int value) {
    this.value = value;
  }
  public int intValue() {
    return value;
  }
}
